/**
 * 利用 memorized 存储每一次的state 或者 effect 的数据
 */

let memorizeds = [];
let cursor = 0;

function useState(initialValue) {
  memorizeds[cursor] = memorizeds[cursor] || initialValue;

  const currentCursor = cursor; // 存储这一次的index， 存储到里面
  function setState(newSate) {
    memorizeds[currentCursor] = newSate;
    render(); // 触发更新
  }
  return [memorizeds[cursor++], setState];
}

function useEffect(callback, depArrays) {
  const hasNoDeps = !depArrays;
  const currentDeps = memorizeds[cursor]; // 获取到当前指定的deps

  const hasChange = currentDeps
    ? currentDeps.every((el, i) => el !== currentDeps[i])
    : true;
  if (hasChange || hasNoDeps) {
    callback && callback();
    memorizeds[cursor] = depArrays;
  }
  cursor++;
}
